package com.atguigu.gmall.user;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;

/**
 * @author lsj
 * @create 2021-08-24 21:48
 *
 *
 * 1、登录是同一一级域名  gmall.com，下的单点登录。 不同域名的单点登录。
 * 2、登录成功以后，我们会给前端一个令牌  （token）；
 *    1）、令牌前端会保留成cookie，放大到一级域名的作用范围。浏览器访问我们旗下的所有网站，都会带上这个cookie
 *    2）、来到服务器，我们就能根据请求带来的Cookie，里面的token识别是哪个用户（uuid）
 *
 *
 *    同时给redis存储了用户信息，以及ip进行防假冒。防住一点
 *    机器(192.168.1.88) --> 小区的路由器--> 你们街道的路由器 --->  京东的网站（ip）
 *    机器(192.168.1.88) --> 小区的路由器--> 你们街道的路由器 --->  京东的网站（ip）
 *    封IP； 杀伤面很大
 *
 *    游戏 ---  黑客（）
 *
 * 3、网站部署 https（安全传输）  cookie基本不会被盗用。传输数据是安全的。
 *   https(外网方式)比 http(内网) 慢
 *
 *
 * 4、网关权限验证
 *      1）、可扩展的权限配置。authurl.urls=[需要登录的所有请求]
 *      2）、身份透传。   网关验证用户合法以后，会把userId作为请求头设置上去，再把请求转给微服务
 *      3）、为了token多端适配。使用 jwt 。
 *
 *                 token是jwt好处是什么？
 *                 1）、jwt可以防伪
 *                      {'typ': 'JWT','alg': 'HS256'}.{userId:2,ip:123.0.0.4}.生成一个唯一签名： base64编码
 *                      dhsahdjkashduiewgrifhkefdchi73yrhhfdskhdsfhj
 *                 2）、jwt可以编码数据
 *                      解码中间的内容 userId=2。
 *                      jwt可以不用查库（redis）就能知道userId
 *                 3）、jwt不可伪造
 *                 4）、缺点：
 *                      jwt验证签名是否正确。服务端需要用加密算法把 这些东西再次加密一下，
 *                      和签名对比，如果不一样就是伪造的。 （浪费CPU的操作）比较慢。
 *                      要用数据把中间部分一解码（很快）
 *
 *
 *                 token是 uuid?（频繁查缓存）没问题，远程查中间件有点慢
 *                 1）、uuid拿来去redis地方，要查出这个token对应的用户id
 *                 2）、id接下来就用
 *                 3）、改造gateway+user。
 *                      1)、登录成功
 *                        {code:222,message:'',data:{token:'jwt（当前用户id等核心）',nickName:""}}
 *                      2）、来到网关
 *                         对jwt进行合法性校验和解码，解码到的userId往下透传。
 *
 *
 *
 * jwt
 *  {'typ': 'JWT','alg': 'HS256'}.{userId:3}.singhnkljdalkjdalkjlkfasdsf
 *  {'typ': 'JWT','alg': 'HS256'}.{userId:4}.dsadadadadada
 *
 *
 */
@SpringCloudApplication
public class ServiceUserApplication {


    public static void main(String[] args) {
        SpringApplication.run(ServiceUserApplication.class,args);
    }
}
